package com.itheima.pattern.t21_memento.black_box;

/**
 * 黑箱备忘录模式：
 * 备忘录角色对发起人对象提供一个宽接口，而为其他对象提供一个窄接口。
 * 在Java语言中，实现双重接口的办法就是将备忘录类设计成发起人类的内部成员类。
 */
public class TestDemo {

    public static void main(String[] args) {
        System.out.println("------------- 大战boss前 -------------");
        // 创建游戏角色对象
        GameRole gameRole = new GameRole();
        gameRole.initState();   // 初始状态操作
        gameRole.stateDisplay();

        // 将该游戏角色内部状态进行备份
        // 创建管理者对象
        RoleStateCaretaker roleStateCaretaker = new RoleStateCaretaker();
        roleStateCaretaker.setMemento(gameRole.saveState());

        System.out.println("------------- 大战boss后 -------------");
        // 损耗严重
        gameRole.fight();
        gameRole.stateDisplay();

        System.out.println("------------- 恢复之前的状态 -------------");
        gameRole.recoverState(roleStateCaretaker.getMemento());
        gameRole.stateDisplay();
    }
}
